package com.dongzili.data.mapdb;//package com.kqns.dataservice.common.mapdb;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.jetbrains.annotations.NotNull;
//import org.mapdb.DataInput2;
//import org.mapdb.DataOutput2;
//import org.mapdb.Serializer;
//
//import java.io.IOException;
//
///**
// * 基于 Jackson ObjectMapper 的 MapDB 序列化器
// * 支持任意对象的 JSON 序列化/反序列化
// */
//public class JsonSerializer<T> implements Serializer<T> {
//
//    // 全局 ObjectMapper 实例（可配置序列化特性）
//    private static final ObjectMapper objectMapper = new ObjectMapper();
//
//    // 目标对象的类型（用于反序列化时确定类型）
//    private final Class<T> type;
//
//    public JsonSerializer(Class<T> type) {
//        this.type = type;
//    }
//
//    @Override
//    public void serialize(@NotNull DataOutput2 out, @NotNull T value) throws IOException {
//        // 序列化对象为 JSON 字节数组
//        byte[] jsonBytes = objectMapper.writeValueAsBytes(value);
//        // 先写入字节数组长度，再写入字节数组（便于反序列化时读取）
//        out.writeInt(jsonBytes.length);
//        out.write(jsonBytes);
//    }
//
//    @Override
//    public T deserialize(@NotNull DataInput2 in, int i) throws IOException {
//        // 读取长度标记
//        int length = in.readInt();
//        if (length == -1) {
//            // 对应 null 值
//            return null;
//        }
//        // 读取 JSON 字节数组
//        byte[] jsonBytes = new byte[length];
//        in.readFully(jsonBytes);
//        // 反序列化为目标类型对象
//        return objectMapper.readValue(jsonBytes, type);
//    }
//
//    @Override
//    public int fixedSize() {
//        // 非固定大小（返回 -1）
//        return -1;
//    }
//}